home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / gcc / libnix.lha / gnu / lib / libnix / sources.lha / headers / splitinline < prev    next >
Encoding:
Text File  |  1994-04-08  |  3.1 KB  |  112 lines

  1. /* 
  2.  * splits a inline header file of gcc into multiple one-function-per-file 
  3.  * c files to generate glue-code.
  4.  */
  5.  
  6. IF ~SHOW("L","rexxsupport.library") THEN
  7. DO
  8.   IF ~ADDLIB("rexxsupport.library",0,-30,34) THEN
  9.   DO
  10.     ECHO "No rexxsupport.library"
  11.     RETURN 20
  12.   END
  13. END
  14.  
  15. filelist=SHOWDIR("gcc:os-include/inline","F","00"x)
  16.  
  17. filelist=DELSTR(filelist,POS("stubs.h",filelist),8)
  18.  
  19. DO WHILE filelist~==""
  20.  
  21.   PARSE VAR filelist filename "00"x filelist
  22.  
  23.   IF ~OPEN(infile,"gcc:os-include/inline/"filename,"R") THEN RETURN 20
  24.   IF ~OPEN(outfile,filename,"W") THEN RETURN 20
  25.  
  26.   DO UNTIL EOF(infile)
  27.     aline=READLN(infile)
  28.     IF LEFT(aline,15)=="static __inline" THEN BREAK
  29.     IF LEFT(aline,2)~=="__" & LEFT(aline,7)~=="#ifndef" & ,
  30.        LEFT(aline,6)~=="#endif" THEN CALL WRITELN(outfile,aline)
  31.   END
  32.  
  33.   IF ~CLOSE(outfile) THEN RETURN 20
  34.  
  35.   DO UNTIL EOF(infile)
  36.  
  37.     IF LEFT(aline,7)=="#define" THEN /* Is a macro */
  38.     DO /* This construction leads to a lot of warnings, but they are harmless */
  39.       
  40.       funcname=WORD(aline,2)
  41.       funcname=LEFT(funcname,POS("(",funcname)-1)
  42.       aline=SUBSTR(aline,9)
  43.  
  44.       IF ~OPEN(outfile,funcname".c","W") THEN RETURN 20
  45.  
  46.       IF RIGHT(aline,1)=="\" THEN
  47.       DO /* ... taglist type */
  48.         bline=READLN(infile)
  49.         start=POS("(",aline)
  50.         DO WHILE start~=0
  51.           aline=INSERT("long ",aline,start)
  52.           start=POS(",",aline,start+1)
  53.         END
  54.         aline=INSERT(",",aline,POS("...",aline)-1)
  55.         aline=LEFT(aline,LENGTH(aline)-1)
  56.         bline=SUBSTR(bline,POS(";",bline)+1)
  57.         bline=LEFT(bline,POS(";",bline)-1)
  58.         bline=INSERT("&",bline,LASTPOS("_",bline))
  59.         bline=DELSTR(bline,LASTPOS("_",bline),1)
  60.       END
  61.       ELSE
  62.       DO /* Normal macro */
  63.     bline=SUBSTR(aline,POS(")",aline)+2)
  64.     aline=LEFT(aline,POS(")",aline))
  65.       END
  66.       
  67.       CALL WRITELN(outfile,"#include <dos/dos.h>")
  68.       CALL WRITELN(outfile,"#include <intuition/classusr.h>")
  69.       CALL WRITELN(outfile,"#include <inline/"filename">")      
  70.       CALL WRITELN(outfile,"#undef "funcname)
  71.       CALL WRITELN(outfile,"long "aline)
  72.       CALL WRITELN(outfile,"{ return "bline"; }")
  73.  
  74.       IF ~CLOSE(outfile) THEN RETURN 20
  75.       
  76.       DO UNTIL EOF(infile)
  77.         aline=READLN(infile)
  78.         IF LEFT(aline,15)=="static __inline" | ,
  79.            LEFT(aline,7)=="#define" THEN BREAK
  80.       END
  81.     END
  82.     ELSE
  83.     DO /* Is a normal function -> no warnings generated */
  84.       bline=READLN(infile)
  85.       funcname=WORD(bline,1)
  86.  
  87.       IF ~OPEN(outfile,funcname".c","W") THEN RETURN 20
  88.     
  89.       CALL WRITELN(outfile,"#include <dos/dos.h>")
  90.       CALL WRITELN(outfile,"#include <intuition/classusr.h>")
  91.       CALL WRITELN(outfile,"#include """filename"""")
  92.       CALL WRITELN(outfile,SUBWORD(aline,3))
  93.       CALL WRITELN(outfile,bline)
  94.     
  95.       DO UNTIL EOF(infile)
  96.         aline=READLN(infile)
  97.         IF LEFT(aline,15)=="static __inline" | ,
  98.            LEFT(aline,7)=="#define" THEN BREAK
  99.         IF LEFT(aline,2)~=="__" & LEFT(aline,7)~=="#ifndef" & ,
  100.            LEFT(aline,6)~=="#endif" THEN CALL WRITELN(outfile,aline)
  101.       END
  102.  
  103.       IF ~CLOSE(outfile) THEN RETURN 20
  104.     END
  105.   END
  106.  
  107.   IF ~CLOSE(infile) THEN RETURN 20
  108.  
  109. END    
  110.  
  111. RETURN 0
  112.